//迭代器设计模式

//场景： 两人协同共同开一个人去清单

// 小明的代码======================
const todos = {
    life:["逛淘宝","花钱","买衣服","吃小龙虾"],
    learn:["语文","数学","英语"],
    work:["喝茶"],
    each:function(callback){
        let arr = [].concat(this.life,this.learn,this.work)
        for(const item of arr){
            callback(item)
        }
    },
    [Symbol.iterator]:function(){
        const arr = [...this.life,...this.learn,...this.work]
        let index = 0
        return {
            next:function(){
                const result = {
                    value:arr[index],
                    done:index++>=arr.length
                }
                return result
            }
        }
    }
}

// 小红的代码===========================

// for(const item of todos.life){
//     console.log(item)
// }
// for(const item of todos.learn){
//     console.log(item)
// }
// for(const item of todos.work){
//     console.log(item)
// }
//如果数据结构发生变化，添加了一个全新的类目，但是目前小红的代码和小明的代码数据结构是严重耦合的，也需要跟着一起去变化

//数据结构可以对外提供一个统一的遍历接口

todos.each(function(item){
    console.log(item)
})

for(const item of todos){
    console.log("迭代器",item)
}

